From lots of studies it seems that in order to capture deep meditation we need to: Do FFT (furrier transform) and check power of alfa (8-12 Hz) and theta (4-8Hz). They should increase as the meditation is deeper. especially in midline areas (electrodes in the middle of the forehead and middle of the scalp) and frontal areas (forehead). If we can check also coherence then it seems that for deeper meditation we should see higher coherence in alfa and theta in the midline and frontal areas. Maybe also we’ll see increase of activity in the right hemisphere. We need to try and check it before BM.
Coherence means to check correlation between waves. How similar are they along time. In our case they measure in the studies coherence of alpha waves from different electrodes, and coherence of theta waves from different electrodes. They found that the coherence of alpha and the coherence of theta grew as the meditation was deeper (means that alpha waves from different electrodes were more similar to each other as the meditation was deeper and same for theta waves). in the last Burning man, the most beautiful installation did just that! they measured heart bits of 6 people at once and checked their coherence and presented that with music and LED’s. As the coherence increased the music and the LED’s were increased as well. It was incredible!
I was working on data exploration. There are visible patterns of increasing alpha and theta channels, espacially for 1 and 2 electrodes.
Where are these two electrodes located?
I explored the data manually, and I discovered some things Nir told us about. I need more data to start with machine learning part.
print(max(eeg$timestamps) - min(eeg$timestamps))
[1] 306.8416
eeg <- read.csv('/Users/sofiagodovykh/Downloads/MuseDirectCloud_180701/Muse-B1C1_2018-06-20--07-42-37_1529495275603.csv')
library(tidyr)
library(ggplot2)
without_na = eeg[!is.na(eeg$theta_absolute_1),]
ggplot(aes(y=theta_absolute_1, na.rm=TRUE, x = timestamps),
data = without_na) + geom_line() + geom_smooth(color="red", span = 0.01)
without_na = eeg[!is.na(eeg$theta_absolute_1),]
without_na = without_na[!is.na(without_na$theta_absolute_2),]
without_na = without_na[!is.na(without_na$theta_absolute_3),]
without_na = without_na[!is.na(without_na$theta_absolute_4),]
ggplot() + geom_line(aes(y=theta_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4]) + geom_smooth(aes(y=theta_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4], span = 0.01) +
geom_line(aes(y=theta_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3]) + geom_smooth(aes(y=theta_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3], span = 0.01) +
geom_line(aes(y=theta_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2]) + geom_smooth(aes(y=theta_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2], span = 0.01) +
geom_line(aes(y=theta_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1]) + geom_smooth(aes(y=theta_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1], span = 0.01) +
labs(y = "theta", title = "theta")

without_na = eeg[!is.na(eeg$alpha_absolute_1),]
without_na = without_na[!is.na(without_na$alpha_absolute_2),]
without_na = without_na[!is.na(without_na$alpha_absolute_3),]
without_na = without_na[!is.na(without_na$alpha_absolute_4),]
ggplot() + geom_line(aes(y=alpha_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4]) + geom_smooth(aes(y=alpha_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4], span = 0.01) +
geom_line(aes(y=alpha_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3]) + geom_smooth(aes(y=alpha_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3], span = 0.01) +
geom_line(aes(y=alpha_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2]) + geom_smooth(aes(y=alpha_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2], span = 0.01) +
geom_line(aes(y=alpha_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1]) + geom_smooth(aes(y=alpha_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1], span = 0.01) +
labs(y = "alpha", title = "alpha")

without_na = eeg[!is.na(eeg$delta_absolute_1),]
without_na = without_na[!is.na(without_na$delta_absolute_2),]
without_na = without_na[!is.na(without_na$delta_absolute_3),]
without_na = without_na[!is.na(without_na$delta_absolute_4),]
ggplot() + geom_line(aes(y=delta_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4]) + geom_smooth(aes(y=delta_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4], span = 0.01) +
geom_line(aes(y=delta_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3]) + geom_smooth(aes(y=delta_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3], span = 0.01) +
geom_line(aes(y=delta_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2]) + geom_smooth(aes(y=delta_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2], span = 0.01) +
geom_line(aes(y=delta_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1]) + geom_smooth(aes(y=delta_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1], span = 0.01) +
labs(y = "delta", title = "delta")

without_na = eeg[!is.na(eeg$gamma_absolute_1),]
without_na = without_na[!is.na(without_na$gamma_absolute_2),]
without_na = without_na[!is.na(without_na$gamma_absolute_3),]
without_na = without_na[!is.na(without_na$gamma_absolute_4),]
ggplot() + geom_line(aes(y=gamma_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4]) + geom_smooth(aes(y=gamma_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4], span = 0.01) +
geom_line(aes(y=gamma_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3]) + geom_smooth(aes(y=gamma_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3], span = 0.01) +
geom_line(aes(y=gamma_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2]) + geom_smooth(aes(y=gamma_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2], span = 0.01) +
geom_line(aes(y=gamma_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1]) + geom_smooth(aes(y=gamma_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1], span = 0.01) +
labs(y = "gamma", title = "gamma")

without_na = eeg[!is.na(eeg$beta_absolute_1),]
without_na = without_na[!is.na(without_na$beta_absolute_2),]
without_na = without_na[!is.na(without_na$beta_absolute_3),]
without_na = without_na[!is.na(without_na$beta_absolute_4),]
ggplot() + geom_line(aes(y=beta_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4]) + geom_smooth(aes(y=beta_absolute_1, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[4], span = 0.01) +
geom_line(aes(y=beta_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3]) + geom_smooth(aes(y=beta_absolute_2, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[3], span = 0.01) +
geom_line(aes(y=beta_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2]) + geom_smooth(aes(y=beta_absolute_3, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[2], span = 0.01) +
geom_line(aes(y=beta_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1]) + geom_smooth(aes(y=beta_absolute_4, x = timestamps),
data = without_na, color=brewer.pal(4, "Blues")[1], span = 0.01) +
labs(y = "beta", title = "beta")

ggplot() + geom_line(aes(y=alpha_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$alpha_absolute_1),], color=brewer.pal(5, "Blues")[5], alpha = 0.5) + geom_smooth(aes(y=alpha_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$alpha_absolute_1),], color=brewer.pal(5, "Blues")[5], span = 0.01) +
geom_line(aes(y=beta_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$beta_absolute_1),], color=brewer.pal(5, "Blues")[4], alpha = 0.5) + geom_smooth(aes(y=beta_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$beta_absolute_1),], color=brewer.pal(5, "Blues")[4], span = 0.01) +
geom_line(aes(y=gamma_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$gamma_absolute_1),], color=brewer.pal(5, "Blues")[3], alpha = 0.5) + geom_smooth(aes(y=gamma_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$gamma_absolute_1),], color=brewer.pal(5, "Blues")[3], span = 0.01) +
geom_line(aes(y=delta_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$delta_absolute_1),], color=brewer.pal(5, "Blues")[2], alpha = 0.5) + geom_smooth(aes(y=delta_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$delta_absolute_1),], color=brewer.pal(5, "Blues")[2], span = 0.01) +
geom_line(aes(y=theta_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$theta_absolute_1),], color=brewer.pal(5, "Blues")[1], alpha = 0.5) + geom_smooth(aes(y=theta_absolute_1, x = timestamps),
data = eeg[!is.na(eeg$theta_absolute_1),], color=brewer.pal(5, "Blues")[1], span = 0.01)

ggplot() + geom_line(aes(y=alpha_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$alpha_absolute_2),], color=brewer.pal(5, "Blues")[5], alpha = 0.5) + geom_smooth(aes(y=alpha_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$alpha_absolute_2),], color=brewer.pal(5, "Blues")[5], span = 0.01) +
geom_line(aes(y=beta_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$beta_absolute_2),], color=brewer.pal(5, "Blues")[4], alpha = 0.5) + geom_smooth(aes(y=beta_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$beta_absolute_2),], color=brewer.pal(5, "Blues")[4], span = 0.01) +
geom_line(aes(y=gamma_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$gamma_absolute_2),], color=brewer.pal(5, "Blues")[3], alpha = 0.5) + geom_smooth(aes(y=gamma_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$gamma_absolute_2),], color=brewer.pal(5, "Blues")[3], span = 0.01) +
geom_line(aes(y=delta_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$delta_absolute_2),], color=brewer.pal(5, "Blues")[2], alpha = 0.5) + geom_smooth(aes(y=delta_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$delta_absolute_2),], color=brewer.pal(5, "Blues")[2], span = 0.01) +
geom_line(aes(y=theta_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$theta_absolute_2),], color=brewer.pal(5, "Blues")[1], alpha = 0.5) + geom_smooth(aes(y=theta_absolute_2, x = timestamps),
data = eeg[!is.na(eeg$theta_absolute_2),], color=brewer.pal(5, "Blues")[1], span = 0.01)

ggplot() + geom_line(aes(y=alpha_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$alpha_absolute_3),], color=brewer.pal(5, "Blues")[5], alpha = 0.5) + geom_smooth(aes(y=alpha_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$alpha_absolute_3),], color=brewer.pal(5, "Blues")[5], span = 0.01) +
geom_line(aes(y=beta_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$beta_absolute_3),], color=brewer.pal(5, "Blues")[4], alpha = 0.5) + geom_smooth(aes(y=beta_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$beta_absolute_3),], color=brewer.pal(5, "Blues")[4], span = 0.01) +
geom_line(aes(y=gamma_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$gamma_absolute_3),], color=brewer.pal(5, "Blues")[3], alpha = 0.5) + geom_smooth(aes(y=gamma_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$gamma_absolute_3),], color=brewer.pal(5, "Blues")[3], span = 0.01) +
geom_line(aes(y=delta_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$delta_absolute_3),], color=brewer.pal(5, "Blues")[2], alpha = 0.5) + geom_smooth(aes(y=delta_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$delta_absolute_3),], color=brewer.pal(5, "Blues")[2], span = 0.01) +
geom_line(aes(y=theta_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$theta_absolute_3),], color=brewer.pal(5, "Blues")[1], alpha = 0.5) + geom_smooth(aes(y=theta_absolute_3, x = timestamps),
data = eeg[!is.na(eeg$theta_absolute_3),], color=brewer.pal(5, "Blues")[1], span = 0.01)

ggplot() + geom_line(aes(y=alpha_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$alpha_absolute_4),], color=brewer.pal(5, "Blues")[5], alpha = 0.5) + geom_smooth(aes(y=alpha_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$alpha_absolute_4),], color=brewer.pal(5, "Blues")[5], span = 0.01) +
geom_line(aes(y=beta_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$beta_absolute_4),], color=brewer.pal(5, "Blues")[4], alpha = 0.5) + geom_smooth(aes(y=beta_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$beta_absolute_4),], color=brewer.pal(5, "Blues")[4], span = 0.01) +
geom_line(aes(y=gamma_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$gamma_absolute_4),], color=brewer.pal(5, "Blues")[3], alpha = 0.5) + geom_smooth(aes(y=gamma_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$gamma_absolute_4),], color=brewer.pal(5, "Blues")[3], span = 0.01) +
geom_line(aes(y=delta_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$delta_absolute_4),], color=brewer.pal(5, "Blues")[2], alpha = 0.5) + geom_smooth(aes(y=delta_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$delta_absolute_4),], color=brewer.pal(5, "Blues")[2], span = 0.01) +
geom_line(aes(y=theta_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$theta_absolute_4),], color=brewer.pal(5, "Blues")[1], alpha = 0.5) + geom_smooth(aes(y=theta_absolute_4, x = timestamps),
data = eeg[!is.na(eeg$theta_absolute_4),], color=brewer.pal(5, "Blues")[1], span = 0.01)

temp <- print(length(eeg[!is.na(eeg$blink), ]))
[1] 101
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKRnJvbSBsb3RzIG9mIHN0dWRpZXMgaXQgc2VlbXMgdGhhdCBpbiBvcmRlciB0byBjYXB0dXJlIGRlZXAgbWVkaXRhdGlvbiB3ZSBuZWVkIHRvOgpEbyBGRlQgKGZ1cnJpZXIgdHJhbnNmb3JtKSBhbmQgY2hlY2sgcG93ZXIgb2YgYWxmYSAoOC0xMiBIeikgYW5kIHRoZXRhICg0LThIeikuIFRoZXkgc2hvdWxkIGluY3JlYXNlIGFzIHRoZSBtZWRpdGF0aW9uIGlzIGRlZXBlci4gZXNwZWNpYWxseSBpbiBtaWRsaW5lIGFyZWFzIChlbGVjdHJvZGVzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZvcmVoZWFkIGFuZCBtaWRkbGUgb2YgdGhlIHNjYWxwKSBhbmQgZnJvbnRhbCBhcmVhcyAoZm9yZWhlYWQpLgogSWYgd2UgY2FuIGNoZWNrIGFsc28gY29oZXJlbmNlIHRoZW4gaXQgc2VlbXMgdGhhdCBmb3IgZGVlcGVyIG1lZGl0YXRpb24gd2Ugc2hvdWxkIHNlZSBoaWdoZXIgY29oZXJlbmNlIGluIGFsZmEgYW5kIHRoZXRhIGluIHRoZSBtaWRsaW5lIGFuZCBmcm9udGFsIGFyZWFzLgpNYXliZSBhbHNvIHdlJ2xsIHNlZSBpbmNyZWFzZSBvZiBhY3Rpdml0eSBpbiB0aGUgcmlnaHQgaGVtaXNwaGVyZS4gV2UgbmVlZCB0byB0cnkgYW5kIGNoZWNrIGl0IGJlZm9yZSBCTS4KCkNvaGVyZW5jZSBtZWFucyB0byBjaGVjayBjb3JyZWxhdGlvbiBiZXR3ZWVuIHdhdmVzLiBIb3cgc2ltaWxhciBhcmUgdGhleSBhbG9uZyB0aW1lLiBJbiBvdXIgY2FzZSB0aGV5IG1lYXN1cmUgaW4gdGhlIHN0dWRpZXMgY29oZXJlbmNlIG9mIGFscGhhIHdhdmVzIGZyb20gZGlmZmVyZW50IGVsZWN0cm9kZXMsIGFuZCBjb2hlcmVuY2Ugb2YgdGhldGEgd2F2ZXMgZnJvbSBkaWZmZXJlbnQgZWxlY3Ryb2Rlcy4KVGhleSBmb3VuZCB0aGF0IHRoZSBjb2hlcmVuY2Ugb2YgYWxwaGEgYW5kIHRoZSBjb2hlcmVuY2Ugb2YgdGhldGEgZ3JldyBhcyB0aGUgbWVkaXRhdGlvbiB3YXMgZGVlcGVyIChtZWFucyB0aGF0IGFscGhhIHdhdmVzIGZyb20gZGlmZmVyZW50IGVsZWN0cm9kZXMgd2VyZSBtb3JlIHNpbWlsYXIgdG8gZWFjaCBvdGhlciBhcyB0aGUgbWVkaXRhdGlvbiB3YXMgZGVlcGVyIGFuZCBzYW1lIGZvciB0aGV0YSB3YXZlcykuCmluIHRoZSBsYXN0IEJ1cm5pbmcgbWFuLCB0aGUgbW9zdCBiZWF1dGlmdWwgaW5zdGFsbGF0aW9uIGRpZCBqdXN0IHRoYXQhCnRoZXkgbWVhc3VyZWQgaGVhcnQgYml0cyBvZiA2IHBlb3BsZSBhdCBvbmNlIGFuZCBjaGVja2VkIHRoZWlyIGNvaGVyZW5jZSBhbmQgcHJlc2VudGVkIHRoYXQgd2l0aCBtdXNpYyBhbmQgTEVEJ3MuIEFzIHRoZSBjb2hlcmVuY2UgaW5jcmVhc2VkIHRoZSBtdXNpYyBhbmQgdGhlIExFRCdzIHdlcmUgaW5jcmVhc2VkIGFzIHdlbGwuIEl0IHdhcyBpbmNyZWRpYmxlIQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJIHdhcyB3b3JraW5nIG9uIGRhdGEgZXhwbG9yYXRpb24uClRoZXJlIGFyZSB2aXNpYmxlIHBhdHRlcm5zIG9mIGluY3JlYXNpbmcgYWxwaGEgYW5kIHRoZXRhIGNoYW5uZWxzLCBlc3BhY2lhbGx5CmZvciAxIGFuZCAyIGVsZWN0cm9kZXMuCgpXaGVyZSBhcmUgdGhlc2UgdHdvIGVsZWN0cm9kZXMgbG9jYXRlZD8KCkkgZXhwbG9yZWQgdGhlIGRhdGEgbWFudWFsbHksIGFuZCBJIGRpc2NvdmVyZWQgc29tZSB0aGluZ3MgTmlyIHRvbGQgdXMgYWJvdXQuIApJIG5lZWQgbW9yZSBkYXRhIHRvIHN0YXJ0IHdpdGggbWFjaGluZSBsZWFybmluZyBwYXJ0LgoKYGBge3J9CnByaW50KG1heChlZWckdGltZXN0YW1wcykgLSBtaW4oZWVnJHRpbWVzdGFtcHMpKQpgYGAKCgpgYGB7cn0KZWVnIDwtIHJlYWQuY3N2KCcvVXNlcnMvc29maWFnb2RvdnlraC9Eb3dubG9hZHMvTXVzZURpcmVjdENsb3VkXzE4MDcwMS9NdXNlLUIxQzFfMjAxOC0wNi0yMC0tMDctNDItMzdfMTUyOTQ5NTI3NTYwMy5jc3YnKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KGdncGxvdDIpCmBgYAoKYGBge3J9CndpdGhvdXRfbmEgPSBlZWdbIWlzLm5hKGVlZyR0aGV0YV9hYnNvbHV0ZV8xKSxdCmdncGxvdChhZXMoeT10aGV0YV9hYnNvbHV0ZV8xLCBuYS5ybT1UUlVFLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEpICsgZ2VvbV9saW5lKCkgKyBnZW9tX3Ntb290aChjb2xvcj0icmVkIiwgc3BhbiA9IDAuMDEpIApgYGAKCmBgYHtyfQp3aXRob3V0X25hID0gZWVnWyFpcy5uYShlZWckdGhldGFfYWJzb2x1dGVfMSksXQp3aXRob3V0X25hID0gd2l0aG91dF9uYVshaXMubmEod2l0aG91dF9uYSR0aGV0YV9hYnNvbHV0ZV8yKSxdCndpdGhvdXRfbmEgPSB3aXRob3V0X25hWyFpcy5uYSh3aXRob3V0X25hJHRoZXRhX2Fic29sdXRlXzMpLF0Kd2l0aG91dF9uYSA9IHdpdGhvdXRfbmFbIWlzLm5hKHdpdGhvdXRfbmEkdGhldGFfYWJzb2x1dGVfNCksXQpnZ3Bsb3QoKSArIGdlb21fbGluZShhZXMoeT10aGV0YV9hYnNvbHV0ZV8xLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbNF0pICsgZ2VvbV9zbW9vdGgoYWVzKHk9dGhldGFfYWJzb2x1dGVfMSwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzRdLCBzcGFuID0gMC4wMSkgKwogZ2VvbV9saW5lKGFlcyh5PXRoZXRhX2Fic29sdXRlXzIsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVszXSkgKyBnZW9tX3Ntb290aChhZXMoeT10aGV0YV9hYnNvbHV0ZV8yLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbM10sIHNwYW4gPSAwLjAxKSArCmdlb21fbGluZShhZXMoeT10aGV0YV9hYnNvbHV0ZV8zLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbMl0pICsgZ2VvbV9zbW9vdGgoYWVzKHk9dGhldGFfYWJzb2x1dGVfMywgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzJdLCBzcGFuID0gMC4wMSkgKwogIGdlb21fbGluZShhZXMoeT10aGV0YV9hYnNvbHV0ZV80LCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbMV0pICsgZ2VvbV9zbW9vdGgoYWVzKHk9dGhldGFfYWJzb2x1dGVfNCwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzFdLCBzcGFuID0gMC4wMSkgKwogIGxhYnMoeSA9ICJ0aGV0YSIsIHRpdGxlID0gInRoZXRhIikKYGBgCgpgYGB7cn0Kd2l0aG91dF9uYSA9IGVlZ1shaXMubmEoZWVnJGFscGhhX2Fic29sdXRlXzEpLF0Kd2l0aG91dF9uYSA9IHdpdGhvdXRfbmFbIWlzLm5hKHdpdGhvdXRfbmEkYWxwaGFfYWJzb2x1dGVfMiksXQp3aXRob3V0X25hID0gd2l0aG91dF9uYVshaXMubmEod2l0aG91dF9uYSRhbHBoYV9hYnNvbHV0ZV8zKSxdCndpdGhvdXRfbmEgPSB3aXRob3V0X25hWyFpcy5uYSh3aXRob3V0X25hJGFscGhhX2Fic29sdXRlXzQpLF0KZ2dwbG90KCkgKyBnZW9tX2xpbmUoYWVzKHk9YWxwaGFfYWJzb2x1dGVfMSwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzRdKSArIGdlb21fc21vb3RoKGFlcyh5PWFscGhhX2Fic29sdXRlXzEsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVs0XSwgc3BhbiA9IDAuMDEpICsKIGdlb21fbGluZShhZXMoeT1hbHBoYV9hYnNvbHV0ZV8yLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbM10pICsgZ2VvbV9zbW9vdGgoYWVzKHk9YWxwaGFfYWJzb2x1dGVfMiwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzNdLCBzcGFuID0gMC4wMSkgKwpnZW9tX2xpbmUoYWVzKHk9YWxwaGFfYWJzb2x1dGVfMywgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzJdKSArIGdlb21fc21vb3RoKGFlcyh5PWFscGhhX2Fic29sdXRlXzMsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVsyXSwgc3BhbiA9IDAuMDEpICsKICBnZW9tX2xpbmUoYWVzKHk9YWxwaGFfYWJzb2x1dGVfNCwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzFdKSArIGdlb21fc21vb3RoKGFlcyh5PWFscGhhX2Fic29sdXRlXzQsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVsxXSwgc3BhbiA9IDAuMDEpICsKICBsYWJzKHkgPSAiYWxwaGEiLCB0aXRsZSA9ICJhbHBoYSIpCmBgYAoKYGBge3J9CndpdGhvdXRfbmEgPSBlZWdbIWlzLm5hKGVlZyRkZWx0YV9hYnNvbHV0ZV8xKSxdCndpdGhvdXRfbmEgPSB3aXRob3V0X25hWyFpcy5uYSh3aXRob3V0X25hJGRlbHRhX2Fic29sdXRlXzIpLF0Kd2l0aG91dF9uYSA9IHdpdGhvdXRfbmFbIWlzLm5hKHdpdGhvdXRfbmEkZGVsdGFfYWJzb2x1dGVfMyksXQp3aXRob3V0X25hID0gd2l0aG91dF9uYVshaXMubmEod2l0aG91dF9uYSRkZWx0YV9hYnNvbHV0ZV80KSxdCmdncGxvdCgpICsgZ2VvbV9saW5lKGFlcyh5PWRlbHRhX2Fic29sdXRlXzEsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVs0XSkgKyBnZW9tX3Ntb290aChhZXMoeT1kZWx0YV9hYnNvbHV0ZV8xLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbNF0sIHNwYW4gPSAwLjAxKSArCiBnZW9tX2xpbmUoYWVzKHk9ZGVsdGFfYWJzb2x1dGVfMiwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzNdKSArIGdlb21fc21vb3RoKGFlcyh5PWRlbHRhX2Fic29sdXRlXzIsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVszXSwgc3BhbiA9IDAuMDEpICsKZ2VvbV9saW5lKGFlcyh5PWRlbHRhX2Fic29sdXRlXzMsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVsyXSkgKyBnZW9tX3Ntb290aChhZXMoeT1kZWx0YV9hYnNvbHV0ZV8zLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbMl0sIHNwYW4gPSAwLjAxKSArCiAgZ2VvbV9saW5lKGFlcyh5PWRlbHRhX2Fic29sdXRlXzQsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVsxXSkgKyBnZW9tX3Ntb290aChhZXMoeT1kZWx0YV9hYnNvbHV0ZV80LCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbMV0sIHNwYW4gPSAwLjAxKSArCiAgbGFicyh5ID0gImRlbHRhIiwgdGl0bGUgPSAiZGVsdGEiKQpgYGAKCmBgYHtyfQp3aXRob3V0X25hID0gZWVnWyFpcy5uYShlZWckZ2FtbWFfYWJzb2x1dGVfMSksXQp3aXRob3V0X25hID0gd2l0aG91dF9uYVshaXMubmEod2l0aG91dF9uYSRnYW1tYV9hYnNvbHV0ZV8yKSxdCndpdGhvdXRfbmEgPSB3aXRob3V0X25hWyFpcy5uYSh3aXRob3V0X25hJGdhbW1hX2Fic29sdXRlXzMpLF0Kd2l0aG91dF9uYSA9IHdpdGhvdXRfbmFbIWlzLm5hKHdpdGhvdXRfbmEkZ2FtbWFfYWJzb2x1dGVfNCksXQpnZ3Bsb3QoKSArIGdlb21fbGluZShhZXMoeT1nYW1tYV9hYnNvbHV0ZV8xLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbNF0pICsgZ2VvbV9zbW9vdGgoYWVzKHk9Z2FtbWFfYWJzb2x1dGVfMSwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzRdLCBzcGFuID0gMC4wMSkgKwogZ2VvbV9saW5lKGFlcyh5PWdhbW1hX2Fic29sdXRlXzIsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVszXSkgKyBnZW9tX3Ntb290aChhZXMoeT1nYW1tYV9hYnNvbHV0ZV8yLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbM10sIHNwYW4gPSAwLjAxKSArCmdlb21fbGluZShhZXMoeT1nYW1tYV9hYnNvbHV0ZV8zLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbMl0pICsgZ2VvbV9zbW9vdGgoYWVzKHk9Z2FtbWFfYWJzb2x1dGVfMywgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzJdLCBzcGFuID0gMC4wMSkgKwogIGdlb21fbGluZShhZXMoeT1nYW1tYV9hYnNvbHV0ZV80LCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbMV0pICsgZ2VvbV9zbW9vdGgoYWVzKHk9Z2FtbWFfYWJzb2x1dGVfNCwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSB3aXRob3V0X25hLCBjb2xvcj1icmV3ZXIucGFsKDQsICJCbHVlcyIpWzFdLCBzcGFuID0gMC4wMSkgKwogICBsYWJzKHkgPSAiZ2FtbWEiLCB0aXRsZSA9ICJnYW1tYSIpCmBgYAoKYGBge3J9CndpdGhvdXRfbmEgPSBlZWdbIWlzLm5hKGVlZyRiZXRhX2Fic29sdXRlXzEpLF0Kd2l0aG91dF9uYSA9IHdpdGhvdXRfbmFbIWlzLm5hKHdpdGhvdXRfbmEkYmV0YV9hYnNvbHV0ZV8yKSxdCndpdGhvdXRfbmEgPSB3aXRob3V0X25hWyFpcy5uYSh3aXRob3V0X25hJGJldGFfYWJzb2x1dGVfMyksXQp3aXRob3V0X25hID0gd2l0aG91dF9uYVshaXMubmEod2l0aG91dF9uYSRiZXRhX2Fic29sdXRlXzQpLF0KZ2dwbG90KCkgKyBnZW9tX2xpbmUoYWVzKHk9YmV0YV9hYnNvbHV0ZV8xLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbNF0pICsgZ2VvbV9zbW9vdGgoYWVzKHk9YmV0YV9hYnNvbHV0ZV8xLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbNF0sIHNwYW4gPSAwLjAxKSArCiBnZW9tX2xpbmUoYWVzKHk9YmV0YV9hYnNvbHV0ZV8yLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbM10pICsgZ2VvbV9zbW9vdGgoYWVzKHk9YmV0YV9hYnNvbHV0ZV8yLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbM10sIHNwYW4gPSAwLjAxKSArCmdlb21fbGluZShhZXMoeT1iZXRhX2Fic29sdXRlXzMsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVsyXSkgKyBnZW9tX3Ntb290aChhZXMoeT1iZXRhX2Fic29sdXRlXzMsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gd2l0aG91dF9uYSwgY29sb3I9YnJld2VyLnBhbCg0LCAiQmx1ZXMiKVsyXSwgc3BhbiA9IDAuMDEpICsKICBnZW9tX2xpbmUoYWVzKHk9YmV0YV9hYnNvbHV0ZV80LCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbMV0pICsgZ2VvbV9zbW9vdGgoYWVzKHk9YmV0YV9hYnNvbHV0ZV80LCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IHdpdGhvdXRfbmEsIGNvbG9yPWJyZXdlci5wYWwoNCwgIkJsdWVzIilbMV0sIHNwYW4gPSAwLjAxKSArCiAgIGxhYnMoeSA9ICJiZXRhIiwgdGl0bGUgPSAiYmV0YSIpCmBgYAoKYGBge3J9CmdncGxvdCgpICsgZ2VvbV9saW5lKGFlcyh5PWFscGhhX2Fic29sdXRlXzEsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckYWxwaGFfYWJzb2x1dGVfMSksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs1XSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9YWxwaGFfYWJzb2x1dGVfMSwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRhbHBoYV9hYnNvbHV0ZV8xKSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzVdLCBzcGFuID0gMC4wMSkgKwpnZW9tX2xpbmUoYWVzKHk9YmV0YV9hYnNvbHV0ZV8xLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGJldGFfYWJzb2x1dGVfMSksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs0XSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9YmV0YV9hYnNvbHV0ZV8xLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGJldGFfYWJzb2x1dGVfMSksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs0XSwgc3BhbiA9IDAuMDEpICsKZ2VvbV9saW5lKGFlcyh5PWdhbW1hX2Fic29sdXRlXzEsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckZ2FtbWFfYWJzb2x1dGVfMSksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVszXSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9Z2FtbWFfYWJzb2x1dGVfMSwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRnYW1tYV9hYnNvbHV0ZV8xKSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzNdLCBzcGFuID0gMC4wMSkgKwpnZW9tX2xpbmUoYWVzKHk9ZGVsdGFfYWJzb2x1dGVfMSwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRkZWx0YV9hYnNvbHV0ZV8xKSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzJdLCBhbHBoYSA9IDAuNSkgKyBnZW9tX3Ntb290aChhZXMoeT1kZWx0YV9hYnNvbHV0ZV8xLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGRlbHRhX2Fic29sdXRlXzEpLF0sIGNvbG9yPWJyZXdlci5wYWwoNSwgIkJsdWVzIilbMl0sIHNwYW4gPSAwLjAxKSArCmdlb21fbGluZShhZXMoeT10aGV0YV9hYnNvbHV0ZV8xLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJHRoZXRhX2Fic29sdXRlXzEpLF0sIGNvbG9yPWJyZXdlci5wYWwoNSwgIkJsdWVzIilbMV0sIGFscGhhID0gMC41KSArIGdlb21fc21vb3RoKGFlcyh5PXRoZXRhX2Fic29sdXRlXzEsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckdGhldGFfYWJzb2x1dGVfMSksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVsxXSwgc3BhbiA9IDAuMDEpCmBgYAoKYGBge3J9CmdncGxvdCgpICsgZ2VvbV9saW5lKGFlcyh5PWFscGhhX2Fic29sdXRlXzIsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckYWxwaGFfYWJzb2x1dGVfMiksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs1XSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9YWxwaGFfYWJzb2x1dGVfMiwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRhbHBoYV9hYnNvbHV0ZV8yKSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzVdLCBzcGFuID0gMC4wMSkgKwpnZW9tX2xpbmUoYWVzKHk9YmV0YV9hYnNvbHV0ZV8yLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGJldGFfYWJzb2x1dGVfMiksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs0XSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9YmV0YV9hYnNvbHV0ZV8yLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGJldGFfYWJzb2x1dGVfMiksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs0XSwgc3BhbiA9IDAuMDEpICsKZ2VvbV9saW5lKGFlcyh5PWdhbW1hX2Fic29sdXRlXzIsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckZ2FtbWFfYWJzb2x1dGVfMiksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVszXSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9Z2FtbWFfYWJzb2x1dGVfMiwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRnYW1tYV9hYnNvbHV0ZV8yKSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzNdLCBzcGFuID0gMC4wMSkgKwpnZW9tX2xpbmUoYWVzKHk9ZGVsdGFfYWJzb2x1dGVfMiwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRkZWx0YV9hYnNvbHV0ZV8yKSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzJdLCBhbHBoYSA9IDAuNSkgKyBnZW9tX3Ntb290aChhZXMoeT1kZWx0YV9hYnNvbHV0ZV8yLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGRlbHRhX2Fic29sdXRlXzIpLF0sIGNvbG9yPWJyZXdlci5wYWwoNSwgIkJsdWVzIilbMl0sIHNwYW4gPSAwLjAxKSArCmdlb21fbGluZShhZXMoeT10aGV0YV9hYnNvbHV0ZV8yLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJHRoZXRhX2Fic29sdXRlXzIpLF0sIGNvbG9yPWJyZXdlci5wYWwoNSwgIkJsdWVzIilbMV0sIGFscGhhID0gMC41KSArIGdlb21fc21vb3RoKGFlcyh5PXRoZXRhX2Fic29sdXRlXzIsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckdGhldGFfYWJzb2x1dGVfMiksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVsxXSwgc3BhbiA9IDAuMDEpCmBgYAoKYGBge3J9CmdncGxvdCgpICsgZ2VvbV9saW5lKGFlcyh5PWFscGhhX2Fic29sdXRlXzMsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckYWxwaGFfYWJzb2x1dGVfMyksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs1XSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9YWxwaGFfYWJzb2x1dGVfMywgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRhbHBoYV9hYnNvbHV0ZV8zKSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzVdLCBzcGFuID0gMC4wMSkgKwpnZW9tX2xpbmUoYWVzKHk9YmV0YV9hYnNvbHV0ZV8zLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGJldGFfYWJzb2x1dGVfMyksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs0XSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9YmV0YV9hYnNvbHV0ZV8zLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGJldGFfYWJzb2x1dGVfMyksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs0XSwgc3BhbiA9IDAuMDEpICsKZ2VvbV9saW5lKGFlcyh5PWdhbW1hX2Fic29sdXRlXzMsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckZ2FtbWFfYWJzb2x1dGVfMyksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVszXSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9Z2FtbWFfYWJzb2x1dGVfMywgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRnYW1tYV9hYnNvbHV0ZV8zKSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzNdLCBzcGFuID0gMC4wMSkgKwpnZW9tX2xpbmUoYWVzKHk9ZGVsdGFfYWJzb2x1dGVfMywgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRkZWx0YV9hYnNvbHV0ZV8zKSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzJdLCBhbHBoYSA9IDAuNSkgKyBnZW9tX3Ntb290aChhZXMoeT1kZWx0YV9hYnNvbHV0ZV8zLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGRlbHRhX2Fic29sdXRlXzMpLF0sIGNvbG9yPWJyZXdlci5wYWwoNSwgIkJsdWVzIilbMl0sIHNwYW4gPSAwLjAxKSArCmdlb21fbGluZShhZXMoeT10aGV0YV9hYnNvbHV0ZV8zLCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJHRoZXRhX2Fic29sdXRlXzMpLF0sIGNvbG9yPWJyZXdlci5wYWwoNSwgIkJsdWVzIilbMV0sIGFscGhhID0gMC41KSArIGdlb21fc21vb3RoKGFlcyh5PXRoZXRhX2Fic29sdXRlXzMsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckdGhldGFfYWJzb2x1dGVfMyksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVsxXSwgc3BhbiA9IDAuMDEpCmBgYAoKYGBge3J9CmdncGxvdCgpICsgZ2VvbV9saW5lKGFlcyh5PWFscGhhX2Fic29sdXRlXzQsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckYWxwaGFfYWJzb2x1dGVfNCksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs1XSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9YWxwaGFfYWJzb2x1dGVfNCwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRhbHBoYV9hYnNvbHV0ZV80KSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzVdLCBzcGFuID0gMC4wMSkgKwpnZW9tX2xpbmUoYWVzKHk9YmV0YV9hYnNvbHV0ZV80LCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGJldGFfYWJzb2x1dGVfNCksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs0XSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9YmV0YV9hYnNvbHV0ZV80LCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGJldGFfYWJzb2x1dGVfNCksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVs0XSwgc3BhbiA9IDAuMDEpICsKZ2VvbV9saW5lKGFlcyh5PWdhbW1hX2Fic29sdXRlXzQsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckZ2FtbWFfYWJzb2x1dGVfNCksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVszXSwgYWxwaGEgPSAwLjUpICsgZ2VvbV9zbW9vdGgoYWVzKHk9Z2FtbWFfYWJzb2x1dGVfNCwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRnYW1tYV9hYnNvbHV0ZV80KSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzNdLCBzcGFuID0gMC4wMSkgKwpnZW9tX2xpbmUoYWVzKHk9ZGVsdGFfYWJzb2x1dGVfNCwgeCA9IHRpbWVzdGFtcHMpLCAKICAgICAgIGRhdGEgPSBlZWdbIWlzLm5hKGVlZyRkZWx0YV9hYnNvbHV0ZV80KSxdLCBjb2xvcj1icmV3ZXIucGFsKDUsICJCbHVlcyIpWzJdLCBhbHBoYSA9IDAuNSkgKyBnZW9tX3Ntb290aChhZXMoeT1kZWx0YV9hYnNvbHV0ZV80LCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJGRlbHRhX2Fic29sdXRlXzQpLF0sIGNvbG9yPWJyZXdlci5wYWwoNSwgIkJsdWVzIilbMl0sIHNwYW4gPSAwLjAxKSArCmdlb21fbGluZShhZXMoeT10aGV0YV9hYnNvbHV0ZV80LCB4ID0gdGltZXN0YW1wcyksIAogICAgICAgZGF0YSA9IGVlZ1shaXMubmEoZWVnJHRoZXRhX2Fic29sdXRlXzQpLF0sIGNvbG9yPWJyZXdlci5wYWwoNSwgIkJsdWVzIilbMV0sIGFscGhhID0gMC41KSArIGdlb21fc21vb3RoKGFlcyh5PXRoZXRhX2Fic29sdXRlXzQsIHggPSB0aW1lc3RhbXBzKSwgCiAgICAgICBkYXRhID0gZWVnWyFpcy5uYShlZWckdGhldGFfYWJzb2x1dGVfNCksXSwgY29sb3I9YnJld2VyLnBhbCg1LCAiQmx1ZXMiKVsxXSwgc3BhbiA9IDAuMDEpCmBgYAoKYGBge3J9CnRlbXAgPC0gcHJpbnQobGVuZ3RoKGVlZ1shaXMubmEoZWVnJGJsaW5rKSwgXSkpCmBgYAoK